#include "bsp_decode.h"


/*
用于正交脉冲解码的高级定时器初始化

接口:
PA04 (TIM5_CHA) 
PA05 (TIM5_CHB)
*/
void Advtimer5_Init(void)
{
	/*GPIO初始化*/
	stc_gpio_cfg_t           stcTIM5Port;
		
	stc_adt_basecnt_cfg_t    stcAdtBaseCntCfg;	
    stc_adt_CHxX_port_cfg_t  stcAdtTIM5ACfg;
    stc_adt_CHxX_port_cfg_t  stcAdtTIM5BCfg;

	DDL_ZERO_STRUCT(stcTIM5Port);
    DDL_ZERO_STRUCT(stcAdtBaseCntCfg);
    DDL_ZERO_STRUCT(stcAdtTIM5ACfg);
    DDL_ZERO_STRUCT(stcAdtTIM5BCfg);
	
	Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能
	
	//PA04设置为TIM5_CHA
	Gpio_Init(GpioPortA, GpioPin4, &stcTIM5Port);
	Gpio_SetAfMode(GpioPortA,GpioPin4,GpioAf5);

	//PA05设置为TIM5_CHB
    Gpio_Init(GpioPortA, GpioPin5, &stcTIM5Port);
    Gpio_SetAfMode(GpioPortA,GpioPin5,GpioAf5);

    Sysctrl_SetPeripheralGate(SysctrlPeripheralAdvTim, TRUE); //ADT外设时钟使能
      
	stcAdtTIM5ACfg.bFltEn = TRUE;
	stcAdtTIM5ACfg.enFltClk = AdtFltClkPclk0Div16;
	Adt_CHxXPortCfg(M0P_ADTIM5, AdtCHxA, &stcAdtTIM5ACfg); //端口CHA默认输入，滤波使能

	stcAdtTIM5BCfg.bFltEn = TRUE;
	stcAdtTIM5BCfg.enFltClk = AdtFltClkPclk0Div16;
	Adt_CHxXPortCfg(M0P_ADTIM5, AdtCHxB, &stcAdtTIM5BCfg);//端口CHB默认输入，滤波使能

	Adt_ClearHwCntUp(M0P_ADTIM5);
	Adt_ClearHwCntDwn(M0P_ADTIM5);
	Adt_CfgHwCntUp(M0P_ADTIM5, AdtHwCntCHxBHighChxARise);//硬件递加计数条件：CHxB端口为高电平时，CHxA端口上采样到上升沿
	Adt_CfgHwCntDwn(M0P_ADTIM5, AdtHwCntCHxBLowCHxARise);//硬件递减计数条件：CHxB端口为低电平时，CHxA端口上采样到上升沿

	Adt_SetCount(M0P_ADTIM5, 50);
	Adt_StartCount(M0P_ADTIM5);
	
 // Adt_EnableValueBuf(M0P_ADTIM4, AdtCHxA, TRUE);     //缓存传送功能打开
 //   Adt_CfgHwCaptureA(M0P_ADTIM4, AdtHwTrigCHxARise);  //硬件捕获A条件配置:
 //   Adt_CfgHwCaptureA(M0P_ADTIM4, AdtHwTrigCHxAFall);  //硬件捕获A条件配置: 
//    Adt_CfgHwClear(M0P_ADTIM4, AdtHwTrigCHxARise);     //硬件清零条件：CHA 端口采样到上升沿
//    Adt_EnableHwClear(M0P_ADTIM5);
 
    //Adt_CfgIrq(M0P_ADTIM5, AdtCMAIrq, TRUE);    //AdvTimer5中断使能
    //Adt_ClearAllIrqFlag(M0P_ADTIM5);
    //EnableNvic(ADTIM5_IRQn, IrqLevel3, TRUE);        
	
}


void Tim5_IRQHandler(void)
{
    //AdvTimer5
    if(TRUE == Adt_GetIrqFlag(M0P_ADTIM5, AdtCMAIrq))
    {    
//      Adt_GetCaptureValue(M0P_ADTIM4, AdtCHxA, &u16Capture);  
//      Adt_GetCaptureBuf(M0P_ADTIM4, AdtCHxA, &u16CaptureBuf);  
        Adt_ClearIrqFlag(M0P_ADTIM5, AdtCMAIrq);    //清除捕获中断标志
    }
}


